home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The PC-SIG Library 10
/
The PC-Sig Library - Shareware for the IBM PC and Compatibles (PC-SIG)(Tenth Edition Disks 1-2804)(1991).iso
/
PC_SIGCD
/
06
/
8
/
DISK0685.ZIP
/
FORTH.ARC
/
BREAK4TH.SCR
< prev
next >
Wrap
Text File
|
1983-08-04
|
8KB
|
1 lines
BREAKFORTH This is a real time video game written entirely in high-level FORTH. This particular version has a few routines specific to tIBM-PC, but may be easily modified for any terminal which supports random cursor addressing. The game requires the STRING character array primitive, and the terminal graphics definitions. The game is started by typing BREAKFORTH. The paddle is controlled by the left and right shift keys on the IBM. The speed may be adjusted by setting the variable SPEED before starting the game (1 fastest, 200 slowest and 0 is a blitz!). ( math: RANDOM ) ( RANDOM NUMBER GENERATOR, J. E. Rickenbacker ) ( FORTH DIMENSIONS II/2 PAGE 34 ) FORTH DEFINITIONS DECIMAL 0 VARIABLE SEED : (RAND) SEED @ 259 * 3 + 32767 AND DUP SEED ! ; ( n -- r : select a random # r, 0<= r < n ) : RANDOM (RAND) 32767 */ ; --> ( games: BREAKFORTH ) FORTH DEFINITIONS DECIMAL : TASK ; 400 ARRAY BLOCKMAP 5 ARRAY BLOCKS 5 ARRAY SCORES 50 VARIABLE SPEED 0 VARIABLE SPVAR 0 VARIABLE SCORE 0 VARIABLE XPOS 0 VARIABLE YPOS 0 VARIABLE PPOS 1 VARIABLE YDIR 1 VARIABLE XDIR 0 VARIABLE BEST : LINE 0 SWAP GOTOXY 80 SPACES ; : BALLSET GOTOXY 111 EMIT HOME ; : BALLCLR GOTOXY 32 EMIT HOME ; : PDLSET PPOS @ 22 GOTOXY 220 220 220 EMIT EMIT EMIT HOME ; : PDLCLR PPOS @ 22 GOTOXY 32 32 32 EMIT EMIT EMIT HOME ; HEX : SOUND 06E 061 PC! ; : QUIET 06C 061 PC! ; : BEEP 64 0 DO SOUND QUIET QUIET QUIET LOOP ; : BOP 64 0 DO SOUND SOUND SOUND QUIET QUIET QUIET LOOP ; --> ( games: BREAKFORTH, cont. ) : L/R 40 17 LC@ 03 AND CASE 02 OF -1 ENDOF 01 OF 1 ENDOF 0 SWAP ENDCASE ; DECIMAL : PADDLE L/R -DUP IF PDLCLR PPOS @ + 20 MAX 57 MIN PPOS ! ENDIF PDLSET ; : BLOCKMAPINDEX 40 * SWAP 2 / + ; : BLKTST YPOS @ 8 < IF XPOS @ YPOS @ BLOCKMAPINDEX BLOCKMAP @ ELSE 0 ENDIF ; : BLKCLR 2DUP SWAP 126 AND SWAP GOTOXY 32 EMIT 32 EMIT BLOCKMAPINDEX BLOCKMAP 0 SWAP ! ; : BLKSET 2DUP GOTOXY DUP 6 - ABS BLOCKS @ DUP EMIT EMIT BLOCKMAPINDEX BLOCKMAP 1 SWAP ! ; : WALLSET 59 20 DO I 1 AND 0= IF I 2 BLKSET I 3 BLKSET I 4 BLKSET I 5 BLKSET I 6 BLKSET ENDIF LOOP ; --> ( games: BREAKFORTH, cont. ) 219 0 BLOCKS ! 178 1 BLOCKS ! 177 2 BLOCKS ! 176 3 BLOCKS ! 32 4 BLOCKS ! 0 VARIABLE MAXSCORE : INIT CLS 10 ( #BALLS ) 5 0 DO I 1+ 5 * I SCORES ! LOOP 61 19 DO I 1 GOTOXY 220 EMIT LOOP 22 1 DO 19 I GOTOXY 222 EMIT 60 I GOTOXY 221 EMIT LOOP WALLSET 0 SCORE ! 0 LINE 7 2 DO 16 I GOTOXY I 6 - ABS SCORES ? LOOP 22 0 GOTOXY ." score: 0 " 35 0 GOTOXY ." best: " BEST ? 50 0 GOTOXY DUP 0 DO 111 EMIT SPACE LOOP 20 DUP 4 SCORES @ * OVER 3 SCORES @ * + OVER 2 SCORES @ * + OVER 1 SCORES @ * + OVER 0 SCORES @ * + MAXSCORE ! DROP ; --> ( games: BREAKFORTH, cont. ) : XCHK XPOS @ 20 < IF XDIR @ MINUS XDIR ! 20 XPOS ! BOP THEN XPOS @ 59 > IF XDIR @ MINUS XDIR ! 59 XPOS ! BOP THEN ; : SPVAR! SPVAR @ SWAP MIN SPVAR ! ; : YCHK YPOS @ DUP 7 < IF 8 SPVAR! ENDIF DUP 6 < IF 7 SPVAR! ENDIF DUP 5 < IF 6 SPVAR! ENDIF DUP 4 < IF 5 SPVAR! ENDIF DUP 3 < IF 4 SPVAR! ENDIF 2 < IF 1 YDIR ! 2 YPOS ! 1 SPVAR ! BOP ENDIF ; 10 ARRAY PDLVEC -2 0 PDLVEC ! -1 1 PDLVEC ! 0 2 PDLVEC ! 1 3 PDLVEC ! 2 4 PDLVEC ! : PCHK 0 YPOS @ 21 > IF 21 YPOS ! XPOS @ PPOS @ - 1+ DUP 0< 0= OVER 5 < AND IF -1 YDIR ! BEEP PDLVEC @ DUP 0= IF DROP ELSE XDIR ! ENDIF --> ( games: BREAKFORTH, cont. ) ELSE DROP 1+ ENDIF ENDIF ; : DELAY SPEED @ SPVAR @ U* DROP 0 DO LOOP ; : CLR XPOS @ YPOS @ BLKCLR YPOS @ 6 - ABS SCORES @ SCORE +! 29 0 GOTOXY SCORE ? BOP YDIR @ MINUS YDIR ! ; : BALLCHK YDIR @ YPOS +! XDIR @ XPOS +! XCHK YCHK PCHK BLKTST IF CLR ENDIF ; : BALL XPOS @ YPOS @ BALLCLR BALLCHK DUP 0= IF XPOS @ YPOS @ BALLSET HOME ENDIF ; : GAMECHK SCORE @ -DUP IF MAXSCORE - 0< 0= IF WALLSET THEN THEN ; --> ( games: BREAKFORTH, cont. ) : BREAKFORTH BEGIN 40 PPOS ! INIT 0 DO 50 I 2 * + 0 GOTOXY SPACE 10 SPVAR ! 2000 SPEED @ / 200 MIN 0 DO DELAY PADDLE LOOP 2 RANDOM 1 = IF 1 ELSE -1 ENDIF XDIR ! 1 YDIR ! 35 RANDOM 22 + XPOS ! 8 YPOS ! BEGIN 3 0 DO PADDLE LOOP DELAY BALL GAMECHK UNTIL LOOP SCORE @ BEST @ MAX BEST ! 22 LINE 34 22 GOTOXY ." again ?" KEY DUP 78 = SWAP 110 = OR UNTIL ; ;S